const jwt = require('jsonwebtoken');
const dotenv = require('dotenv');

// 加载环境变量
dotenv.config();

// 获取 JWT 密钥
const JWT_SECRET = process.env.JWT_SECRET;

/**
 * 验证用户身份的中间件
 * @param {Object} req - Express 请求对象
 * @param {Object} res - Express 响应对象
 * @param {Function} next - 中间件链中的下一个函数
 */
function authenticateUser(req, res, next) {
  // 从请求头中获取授权信息
  const authHeader = req.headers['authorization'];
  // 提取令牌
  const token = authHeader && authHeader.split(' ')[1];

  // 如果没有令牌，返回 401 状态码
  if (!token) {
    return res.status(401).json({ message: '未提供令牌，访问被拒绝' });
  }

  // 验证令牌
  jwt.verify(token, JWT_SECRET, (err, user) => {
    if (err) {
      // 如果令牌无效，返回 403 状态码
      return res.status(403).json({ message: '无效的令牌，访问被拒绝' });
    }
    // 将用户信息添加到请求对象中
    req.user = user;
    // 调用下一个中间件
    next();
  });
}

module.exports = authenticateUser;